1 package tw.com.javaworld.CH11;
2 
3 import java.io.*;
4 import javax.servlet.*;
5 import javax.servlet.http.*;
6 
7 public class SessionChecker implements Filter {
8     private ServletContext context;
9     private String targetURI;
10
11    public void init(FilterConfig config) throws ServletException {
12        context = config.getServletContext();
13        targetURI = config.getInitParameter("targetURI");
14    }
15
16    public void doFilter(
17        ServletRequest request,
18        ServletResponse response,
19        FilterChain chain)throws IOException, ServletException {
20        
21        HttpServletRequest httpRequest = (HttpServletRequest) request;
22        HttpServletResponse httpResponse = (HttpServletResponse) response;
23        HttpSession session = httpRequest.getSession(false);
24        
25        if (session != null) {
26            String passed = (String) session.getAttribute("passed");
27            if (passed.equals("true")) {
28                chain.doFilter(httpRequest, httpResponse);
29                return;
30            } else if (passed.equals("passing")) {
31                if (new String(httpRequest.getRequestURI())
32                    .equals("/JSPBook/LoginChecker")) {
33                    chain.doFilter(httpRequest, httpResponse);
34                    return;
35                }
36            } else { }
37            
38            session.removeAttribute("passed");
39        }
40        StringBuffer requestURL = httpRequest.getRequestURL();
41        String query = httpRequest.getQueryString();
42        if (query != null)
43            requestURL.append(query);
44        httpRequest.setAttribute("originalURI", new String(requestURL));
45        httpRequest.getRequestDispatcher(targetURI).forward(httpRequest, httpResponse);
46    }
47    public void destroy() {
48    }
49}